package com.ipartek.formacion.gestformwww.controlador;

import com.ipartek.formacion.gestformwww.modelo.*;
import com.ipartek.formacion.gestformwww.modelo.beans.*;
import com.ipartek.formacion.gestformwww.modelo.beans.excepciones.GestorFormacionExcepcion;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

/**
 *
 * @author Xarles y Borja
 */
public class VisualizarAlumnoAccion implements Accion {

    private final String visualizarcurso = "visualizar-curso-accion";
    private final String listarcursos = "listar-cursos-accion";
    private final String visualizarcalificacion = "visualizar-calificacion-accion";
    private final String visualizarasistencia = "visualizar-asistencia-accion";
    private final String visualizarinfocurso = "visualizar-infocurso-accion";
    private final String visualizarsms = "visualizar-sms-accion";
    private final String listarmatriculas = "listar-matriculas-accion";
    private final String listaremails = "listar-emails-accion";

    /**
     * Carga los datos del alumno y los de la pestaña seleccionada
     * @param servlet
     * @param request
     * @param response
     * @return Devuelve el router que llevara el nombre de la jsp que corresponda
     */
    public AccionRouter ejecuta(HttpServlet servlet, HttpServletRequest request, HttpServletResponse response) {
        HttpSession sesion;
        AccionServlet as = (AccionServlet) servlet;
        sesion = request.getSession();
        AccionRouter router;
        String path = null;
        ModeloCurso mcurso = (ModeloCurso) servlet.getServletContext().getAttribute("ModeloCurso");
        ModeloAlumno malumno = (ModeloAlumno) servlet.getServletContext().getAttribute("ModeloAlumno");
        ModeloEmpresa mempresa = (ModeloEmpresa) servlet.getServletContext().getAttribute("ModeloEmpresa");
        ModeloProcedencia mprocedencia = (ModeloProcedencia) servlet.getServletContext().getAttribute("ModeloProcedencia");
        Alumno alumnoMostrar = new Alumno();
        ArrayList<Empresa> empresas = new ArrayList<Empresa>();
        ArrayList<Procedencia> procedencias = new ArrayList<Procedencia>();


        Integer idAlumno = -1;
        Integer idCurso = -1;

        if (sesion.getAttribute("usuario") == null) {
            router = new AccionRouter("inicio", false);
        } else {
            router = new AccionRouter("principal");

            if ((Verificador.numeroValido(request.getParameter("idAlumno")) || (request.getAttribute("idAlumno") != null))
                    && (Verificador.numeroValido(request.getParameter("idCurso")) || (request.getAttribute("idCurso") != null))) {
                if (request.getAttribute("idAlumno") != null) {
                    idAlumno = (Integer) request.getAttribute("idAlumno");
                } else {
                    idAlumno = Integer.parseInt(request.getParameter("idAlumno"));
                }
                if (request.getAttribute("idCurso") != null) {
                    idCurso = Integer.parseInt((String) request.getAttribute("idCurso"));
                } else {
                    idCurso = Integer.parseInt(request.getParameter("idCurso"));
                }
                try {
                    alumnoMostrar = malumno.visualizarAlumno(idAlumno, idCurso);
                } catch (GestorFormacionExcepcion ex) {
                    Logger.getLogger(VisualizarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    sesion.setAttribute("excepciones", ex.getMessage());
                }
                if (alumnoMostrar != null) {
                    try {
                        Curso curso = null;
                        try {
                            curso = mcurso.visualizarCurso(idCurso);
                            empresas = mempresa.listarEmpresas();
                            procedencias = mprocedencia.listarProcedencia();
                        } catch (GestorFormacionExcepcion ex) {
                            Logger.getLogger(VisualizarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                            sesion.setAttribute("excepciones", ex.getMessage());
                        }

                        request.setAttribute("nombreCurso", curso.getCurNom());// Si no hay conexion da error en esta linea
                        request.setAttribute("visualizaalumno", alumnoMostrar);
                        request.setAttribute("contenido", "visualiza-alumno");
                        request.setAttribute("listaEmpresas", empresas);
                        request.setAttribute("listaProcedencias", procedencias);

                        int pestana = 0;
                        if (Verificador.numeroValido(request.getParameter("idPestanaAlumno"))) {
                            pestana = Integer.parseInt(request.getParameter("idPestanaAlumno"));
                        }

                        switch (pestana) {
                            case 2:
                                path = visualizarasistencia;
                                router = as.getFactory().getAction(as.getNombreClaseRecurso(path), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                                break;
                            case 3:
                                path = visualizarinfocurso;
                                router = as.getFactory().getAction(as.getNombreClaseRecurso(path), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                                break;
                            case 4:
                                path = visualizarsms;
                                router = as.getFactory().getAction(as.getNombreClaseRecurso(path), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                                break;
                            case 5:
                                path = listarmatriculas;
                                router = as.getFactory().getAction(as.getNombreClaseRecurso(path), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                                break;
                            case 6:
                                path = listaremails;
                                router = as.getFactory().getAction(as.getNombreClaseRecurso(path), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                                break;
                            default:
                                path = visualizarcalificacion;
                                router = as.getFactory().getAction(as.getNombreClaseRecurso(path), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                                break;
                        }
                    } catch (ClassNotFoundException ex) {
                        Logger.getLogger(VisualizarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (InstantiationException ex) {
                        Logger.getLogger(VisualizarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    } catch (IllegalAccessException ex) {
                        Logger.getLogger(VisualizarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                    }

                } else {
                    if (request.getParameter("idCurso") != null) {
                        try {
                            request.setAttribute("idCurso", request.getParameter("idCurso"));
                            path = visualizarcurso;
                            router = as.getFactory().getAction(as.getNombreClaseRecurso(path), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                        } catch (ClassNotFoundException ex) {
                            Logger.getLogger(VisualizarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (InstantiationException ex) {
                            Logger.getLogger(VisualizarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (IllegalAccessException ex) {
                            Logger.getLogger(VisualizarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    } else {
                        try {
                            path = listarcursos;
                            router = as.getFactory().getAction(as.getNombreClaseRecurso(path), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                        } catch (ClassNotFoundException ex) {
                            Logger.getLogger(VisualizarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (InstantiationException ex) {
                            Logger.getLogger(VisualizarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        } catch (IllegalAccessException ex) {
                            Logger.getLogger(VisualizarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                        }
                    }
                }
            } else {
                try {
                    path = listarcursos;
                    router = as.getFactory().getAction(as.getNombreClaseRecurso(path), servlet.getClass().getClassLoader()).ejecuta(servlet, request, response);
                } catch (ClassNotFoundException ex) {
                    Logger.getLogger(VisualizarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (InstantiationException ex) {
                    Logger.getLogger(VisualizarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                } catch (IllegalAccessException ex) {
                    Logger.getLogger(VisualizarAlumnoAccion.class.getName()).log(Level.SEVERE, null, ex);
                }
            }
        }


        return router;
    }
}
